home *** CD-ROM | disk | FTP | other *** search
/ Isometric Game Programming with DirectX 7.0 / Isometric Game Programming.iso / source / chapter2 / isohex2_3 / isohex2_3.cpp next >
C/C++ Source or Header  |  2000-05-12  |  6KB  |  261 lines

  1. /*****************************************************************************
  2. IsoHex2_3.cpp
  3. Ernest S. Pazera
  4. 12MAY2000
  5. Start a WIN32 Application Workspace, add in this file
  6. No other libs are required
  7. *****************************************************************************/
  8.  
  9. //////////////////////////////////////////////////////////////////////////////
  10. //INCLUDES
  11. //////////////////////////////////////////////////////////////////////////////
  12. #define WIN32_LEAN_AND_MEAN  
  13.  
  14. #include <windows.h>   
  15.  
  16. //////////////////////////////////////////////////////////////////////////////
  17. //DEFINES
  18. //////////////////////////////////////////////////////////////////////////////
  19. //name for our window class
  20. #define WINDOWCLASS "ISOHEX2"
  21. //title of the application
  22. #define WINDOWTITLE "IsoHex 2-3"
  23.  
  24. //////////////////////////////////////////////////////////////////////////////
  25. //PROTOTYPES
  26. //////////////////////////////////////////////////////////////////////////////
  27. bool Prog_Init();//game data initalizer
  28. void Prog_Loop();//main game loop
  29. void Prog_Done();//game clean up
  30.  
  31. //////////////////////////////////////////////////////////////////////////////
  32. //GLOBALS
  33. //////////////////////////////////////////////////////////////////////////////
  34. HINSTANCE hInstMain=NULL;//main application handle
  35. HWND hWndMain=NULL;//handle to our main window
  36. HPEN hpenNew=NULL;//new pen
  37. HPEN hpenOld=NULL;//old pen
  38.  
  39. //////////////////////////////////////////////////////////////////////////////
  40. //WINDOWPROC
  41. //////////////////////////////////////////////////////////////////////////////
  42. LRESULT CALLBACK TheWindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
  43. {
  44.     //which message did we get?
  45.     switch(uMsg)
  46.     {
  47.     case WM_LBUTTONDOWN:
  48.         {
  49.             //extract x and y from lparam
  50.             int x=LOWORD(lParam);
  51.             int y=HIWORD(lParam);
  52.  
  53.             //borrow the main window's DC
  54.             HDC hdc=GetDC(hWndMain);
  55.  
  56.             //update the CP
  57.             MoveToEx(hdc,x,y,NULL);
  58.  
  59.             //return the dc to the system
  60.             ReleaseDC(hWndMain,hdc);
  61.  
  62.             //handled, return 0
  63.             return(0);
  64.         }break;
  65.     case WM_MOUSEMOVE:
  66.         {
  67.             //if left button is down
  68.             if(wParam & MK_LBUTTON)
  69.             {
  70.                 //extract x and y from lparam
  71.                 int x=LOWORD(lParam);
  72.                 int y=HIWORD(lParam);
  73.  
  74.                 //borrow the main window's DC
  75.                 HDC hdc=GetDC(hWndMain);
  76.  
  77.                 //line to the x,y position
  78.                 LineTo(hdc,x,y);
  79.  
  80.                 //return the dc to the system
  81.                 ReleaseDC(hWndMain,hdc);
  82.             }
  83.  
  84.             //handled, return 0
  85.             return(0);
  86.         }break;
  87.     case WM_DESTROY://the window is being destroyed
  88.         {
  89.  
  90.             //tell the application we are quitting
  91.             PostQuitMessage(0);
  92.  
  93.             //handled message, so return 0
  94.             return(0);
  95.  
  96.         }break;
  97.     case WM_PAINT://the window needs repainting
  98.         {
  99.             //a variable needed for painting information
  100.             PAINTSTRUCT ps;
  101.             
  102.             //start painting
  103.             HDC hdc=BeginPaint(hwnd,&ps);
  104.  
  105.             /////////////////////////////
  106.             //painting code would go here
  107.             /////////////////////////////
  108.  
  109.             //end painting
  110.             EndPaint(hwnd,&ps);
  111.                         
  112.             //handled message, so return 0
  113.             return(0);
  114.         }break;
  115.     }
  116.  
  117.     //pass along any other message to default message handler
  118.     return(DefWindowProc(hwnd,uMsg,wParam,lParam));
  119. }
  120.  
  121.  
  122. //////////////////////////////////////////////////////////////////////////////
  123. //WINMAIN
  124. //////////////////////////////////////////////////////////////////////////////
  125. int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
  126. {
  127.     //assign instance to global variable
  128.     hInstMain=hInstance;
  129.  
  130.     //create window class
  131.     WNDCLASSEX wcx;
  132.  
  133.     //set the size of the structure
  134.     wcx.cbSize=sizeof(WNDCLASSEX);
  135.  
  136.     //class style
  137.     wcx.style=CS_OWNDC | CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
  138.  
  139.     //window procedure
  140.     wcx.lpfnWndProc=TheWindowProc;
  141.  
  142.     //class extra
  143.     wcx.cbClsExtra=0;
  144.  
  145.     //window extra
  146.     wcx.cbWndExtra=0;
  147.  
  148.     //application handle
  149.     wcx.hInstance=hInstMain;
  150.  
  151.     //icon
  152.     wcx.hIcon=LoadIcon(NULL,IDI_APPLICATION);
  153.  
  154.     //cursor
  155.     wcx.hCursor=LoadCursor(NULL,IDC_ARROW);
  156.  
  157.     //background color
  158.     wcx.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
  159.  
  160.     //menu
  161.     wcx.lpszMenuName=NULL;
  162.  
  163.     //class name
  164.     wcx.lpszClassName=WINDOWCLASS;
  165.  
  166.     //small icon
  167.     wcx.hIconSm=NULL;
  168.  
  169.     //register the window class, return 0 if not successful
  170.     if(!RegisterClassEx(&wcx)) return(0);
  171.  
  172.     //create main window
  173.     hWndMain=CreateWindowEx(0,WINDOWCLASS,WINDOWTITLE, WS_BORDER | WS_SYSMENU | WS_VISIBLE,0,0,320,240,NULL,NULL,hInstMain,NULL);
  174.  
  175.     //error check
  176.     if(!hWndMain) return(0);
  177.  
  178.     //if program initialization failed, then return with 0
  179.     if(!Prog_Init()) return(0);
  180.  
  181.     //message structure
  182.     MSG msg;
  183.  
  184.     //message pump
  185.     for(;;)    
  186.     {
  187.         //look for a message
  188.         if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
  189.         {
  190.             //there is a message
  191.  
  192.             //check that we arent quitting
  193.             if(msg.message==WM_QUIT) break;
  194.             
  195.             //translate message
  196.             TranslateMessage(&msg);
  197.  
  198.             //dispatch message
  199.             DispatchMessage(&msg);
  200.         }
  201.  
  202.         //run main game loop
  203.         Prog_Loop();
  204.     }
  205.     
  206.     //clean up program data
  207.     Prog_Done();
  208.  
  209.     //return the wparam from the WM_QUIT message
  210.     return(msg.wParam);
  211. }
  212.  
  213. //////////////////////////////////////////////////////////////////////////////
  214. //INITIALIZATION
  215. //////////////////////////////////////////////////////////////////////////////
  216. bool Prog_Init()
  217. {
  218.     //create the new pen
  219.     hpenNew=CreatePen(PS_SOLID,0,RGB(255,255,255));
  220.  
  221.     //borrow dc from main window
  222.     HDC hdc=GetDC(hWndMain);
  223.  
  224.     //select new pen into dc
  225.     hpenOld=(HPEN)SelectObject(hdc,hpenNew);
  226.  
  227.     //release dc to system
  228.     ReleaseDC(hWndMain,hdc);
  229.  
  230.     return(true);//return success
  231. }
  232.  
  233. //////////////////////////////////////////////////////////////////////////////
  234. //CLEANUP
  235. //////////////////////////////////////////////////////////////////////////////
  236. void Prog_Done()
  237. {
  238.     //borrow dc from main window
  239.     HDC hdc=GetDC(hWndMain);
  240.  
  241.     //restore old pen to dc
  242.     SelectObject(hdc,hpenOld);
  243.  
  244.     //release dc to system
  245.     ReleaseDC(hWndMain,hdc);
  246.  
  247.     //delete new pen
  248.     DeleteObject(hpenNew);
  249. }
  250.  
  251. //////////////////////////////////////////////////////////////////////////////
  252. //MAIN GAME LOOP
  253. //////////////////////////////////////////////////////////////////////////////
  254. void Prog_Loop()
  255. {
  256.     ///////////////////////////
  257.     //main game logic goes here
  258.     ///////////////////////////
  259. }
  260.  
  261.